import $ from 'jquery';

export function fetch(data) {
    return $.ajax({
        url: 'http://libapi.changxiaoyuan.com/index.php',
        timeout: 12000,
        dataType: 'json',
        data: data,
        crossDomain: true
    })
}

export function fetch_rec(wxid) {
    return fetch({
        'do': 'recommend',
        'OpenID': wxid
    })
}

export function fetchDouban( isbn ){
    return $.ajax({
        url: `http://api.douban.com/v2/book/isbn/${isbn}`,
        timeout: 12000,
        dataType: 'jsonp',
        crossDomain: true
    })
}

export function dom( selector, isAll = false ){
    return isAll === true ? document.querySelectorAll( selector ):
                            document.querySelector( selector );
}

export const cover = {
    // 7牛里没有，先从豆瓣搜索
    getFromDouban( isbn ){
        return $.ajax({
            url: `https://api.douban.com/v2/book/isbn/${isbn}`,
            dataType: 'jsonp'
        })
    },

    // 豆瓣里找到了，把图存到7牛
    storeImgFromDouban( href ){
        $.ajax({
            url: '',
            data: { href }
        })
    }
}

// 合并对象
export function merge( ...obj ){
    obj.unshift( {} );
    return $.extend.apply( undefined, obj );
}

// 获取文本真实宽度
export function getTextWidth( text ){
    let
    range = document.createRange(),
    rangeDOM = document.getElementById( 'range' );
    rangeDOM.textContent = text;
    range.selectNodeContents(rangeDOM);
    let width = range.getBoundingClientRect().width;
    // range.detach();
    rangeDOM.textContent = '';
    return width;
}

/**
 * 批量获取localstorage中的数据
 * @param  {string} 要获取的数据的key，逗号隔开
 * @return {array}  用于解构赋值的数组
 */
function getItem( ...keys ){
    return keys.map( i => localStorage.getItem( i ) );
}

/**
 * 批量存储数据到localstorage中
 * @param {string} 要存储的键，值交替传入，逗号隔开
 */
function setItem( ...kvs ){
    kvs.forEach( ( e, i, a ) => {
        if( i % 2 !== 0 ) return false;
        localStorage.setItem( e, a[ i+1 ] );
    });
}

function clear(){
    localStorage.clear()
}

export const store = { getItem, setItem, clear };

/**
 * 返回真实数据类型
 * @param  {any}   任意数据，逗号隔开
 * @return {array|and} 传入数据的数据类型，当传入数据大于1个时，返回数组用于解构赋值
 *                     否则只返回一个字符串。
 */
export function Typeof( ...value ){
    let r = value.map( i => ({}).toString.call( i ).match(/\s(\w*)]/)[1] );
    return r.length === 1 ? r[0] : r ;
}


// 在xhr fail时调用将隐式传入xhr, statusText
export function handleError(xhr, statusText) {
    if( statusText === 'timeout' ){
        this.props.sendMessage( '服务器繁忙，请稍后重试。' );
    }else if(statusText !== 'abort'){
        this.props.sendMessage( '网络连接出现问题，请检查网络连接并重试。' );
    }
}

// 通过索书号返回所在书库名称
export function getStackName( detail ){
    detail = detail.trim();
    switch( true ){
        case /^t/i.test( detail ):
            return '（计算机通信书库）';
        case /^[xrnso]/i.test( detail ):
            return '（数理书库）';
        case /^h/i.test( detail ):
            return '（外文书库）';
        case /^f/i.test( detail ):
            return '（经济管理书库）';
        case /^i/i.test( detail ):
            return '（文艺书库）';
        case /^[abcdegjk]/i.test( detail ):
            return '（社科书库）';
        default:
            return '';
    }
}

export function inspect( username, password ){
    let u = {},
        p = {};

    switch( true ){
        case username.length === 0:
            u.err = true;
            u.msg = '还未填写图书证号';
            break;

        // 补办的卡是7位
        case !/^S\d{7,8}$/.test( username ):
            u.err = true;
            u.msg = '图书证号格式不正确';
            break;

        default:
            u.err = false;
            u.msg = '';
    }

    if( password.length === 0 ){
        p.err = true;
        p.msg = '还未填写密码';
    }else{
        p.err = false;
        p.msg = '';
    }

    return [ u, p ];
}

export const qiniu = 'http://img.changxiaoyuan.com/lpic';

// 视口宽度
export const viewport = document.documentElement.clientWidth;

export const isMobile = viewport > 768 ? false : true;
